// Copyright (c) 2007, Clarius Consulting, Manas Technology Solutions, InSTEDD, and Contributors.
// All rights reserved. Licensed under the BSD 3-Clause License; see License.txt.

using System.ComponentModel;

namespace Moq
{
	/// <summary>
	/// Determines the way default values are generated 
	/// calculated for loose mocks.
	/// </summary>
	public enum DefaultValue
	{
		/// <summary>
		/// Default behavior, which generates empty values for 
		/// value types (i.e. default(int)), empty array and 
		/// enumerables, and nulls for all other reference types.
		/// </summary>
		Empty,

		/// <summary>
		/// Whenever the default value generated by <see cref="Empty"/> 
		/// is null, replaces this value with a mock (if the type 
		/// can be mocked). 
		/// </summary>
		/// <remarks>
		/// For sealed classes, a null value will be generated.
		/// </remarks>
		Mock,

		/// <summary>
		///   <para>
		///     All default value generation strategies other than <see cref="Empty"/> or <see cref="Mock"/>
		///     are represented by this enumeration value.
		///   </para>
		///   <para>
		///     Do not set <see cref="Mock.DefaultValue"/> (nor <see cref="MockFactory.DefaultValue"/>) to this value.
		///     If you want to set up a custom default value generation strategy, set <see cref="Mock.DefaultValueProvider"/>
		///     or <see cref="MockFactory.DefaultValueProvider"/> instead.
		///   </para>
		/// </summary>
		/// <remarks>
		/// </remarks>
		[EditorBrowsable(EditorBrowsableState.Advanced)]
		Custom
	}
}
